<?php

abstract class VA_Form_File_Storage {
  private $initOptions = null;
  public function  __construct($options) {
    $this->initOptions = $options;
  }
  /**
   * Удаляет файл из хранилища
   * 
   * @param string $filePointer указатель на файл
   * @return boolean TRUE если файл удален, FALSE иначе
   */
  abstract public function Remove($filePointer);
  /**
   *
   * @param VA_Form_File_UploadedFile $file
   * @return string указатель для хранилища - где лежит файл
   */
  abstract public function Put(VA_Form_File_UploadedFile $file);
  /**
   * Украшает имя, полученное от хранилища, отсекая случайную часть, которую дописало хранилище к файлу
   * 
   * @example It turns files like "01022009.lala.jpg" to "lala.jpg"
   * @param string $filepointer
   * @return string нормальное имя файла, годное к показу пользователям
   */
  abstract static public function beautifyFileName($filepointer);
  /**
   * 
   * @param string $name
   * @param mixed $default
   * @return mixed
   */
  protected function getOption($name, $default = null){
    if(!key_exists($name, $this->initOptions) && (null === $default))
            throw new Exception(sprintf('required option "%s" is missing!', $name));
    if(key_exists($name, $this->initOptions)) return $this->initOptions[$name];
    else {
      $this->initOptions[$name] = $default;
      return $default;
    }
  }
  /**
   * Опции для инициализации хранилища каким-нибудь маппером
   *
   * @return array
   */
  public function getInitOptions() { return $this->initOptions; }
}